// 理解"方法"

// 采用"函数声明"方式定义函数(function)
function add( a , b ) {
    return a + b ;
}

// 采用"函数表达式"方式定义函数(function)
let sub = function( a , b ){
    return a - b ;
}

// 采用"箭头函数"方式定义函数(function)
let div = ( a , b)=> a / b ;

// 通过函数名(或变量名)来调用函数
console.log( add( 4 , 6 ) );
console.log( sub( 6 , 4 ) );
console.log( div( 6 , 4 ) );

// 借助function关键字定义对象
function Student( id , name ){
    this.id = id ;
    this.name = name  ;
    // 定义实例方法(本质上还是个函数)
    this.intrduce = function(){
        console.log( this.id , this.name );
    }
}

// 定义静态方法(本质上还是将函数作为取值赋值给静态变量)
Student.desc = function(){
    console.log( '我表示学生类型' );
}

// 调用静态方法
Student.desc();

let x = new Student( 1001 , '小姜同学' );
// 调用实例方法(method)
x.intrduce();
// x.desc(); // TypeError: x.desc is not a function

console.log( '- - - - - - - - - - - - - - - - - -' );

class Panda {
    constructor(id,name) {
        this.id = id ;
        this.name = name ;
    }
    // 定义实例方法
    intrduce(){
        console.log( this.id , this.name );
    }
    // 定义静态方法
    static desc(){
        console.log( '我表示熊猫类型' );
    }
}

//  调用静态方法
Panda.desc();

let p = new Panda( 1001 , '美美' );
p.intrduce();

console.log( '- - - - - - - - - - - - - - - - - -' );

// 采用 对象字面量 来定义实例
let s = {
    id: 1002,
    name: '大姜同学',
    // 定义实例方法(本质上是属性的取值是函数)
    intrduce: function(){
        console.log( this.id , this.name );
    },
    show(){
        console.log( `我是${this.name}` );
    }
}

s.intrduce();
s.show();

console.log( Object.getOwnPropertyNames( s ) );